package com.ucar.train.service.xumingzhi;


import com.ucar.train.service.xumingzhi.Process.ChangeFilterElement;
import com.ucar.train.service.xumingzhi.Process.ProcessTemplate;
import com.ucar.train.service.xumingzhi.ResultUtil.CarStateEnum;
import com.ucar.train.service.xumingzhi.ResultUtil.Result;
import com.ucar.train.service.xumingzhi.ResultUtil.ResultUtil;

/**
 * Desciption:
 *
 * @Author: XuMingZhi.
 * Creation time: 2019/8/22 8:36:00.
 * © Copyright 2013-2019, UCar.
 */
public class Car {
    private CarStateEnum carStateEnum;//车辆状态

    // 先初始化一个头节点, 头节点不要动, 不存放具体的数据
    private ProcessTemplate head = new ChangeFilterElement();

    // 返回头节点
    public ProcessTemplate getHead() {
        return head;
    }

    // 遍历双向链表的方法
    // 显示链表[遍历]

    public CarStateEnum getCarStateEnum() {
        return carStateEnum;
    }

    public void setCarStateEnum(CarStateEnum carStateEnum) {
        this.carStateEnum = carStateEnum;
    }

    public Result maintenance(){
        if (head.getNextProcessTemplate() == null) {

            return ResultUtil.GONE("没有设置保养过程");
        }else {
            ProcessTemplate temp = head.getNextProcessTemplate();
            return temp.handleMessage();
        }
    }
    public void list() {
        // 判断链表是否为空
        if (head.getNextProcessTemplate() == null) {
            System.out.println("链表为空");
            return;
        }
        // 因为头节点，不能动，因此我们需要一个辅助变量来遍历
        ProcessTemplate temp = head.getNextProcessTemplate();
        while (true) {
            // 判断是否到链表最后
            if (temp == null) {
                break;
            }
            // 输出节点的信息
            System.out.println(temp);
            // 将temp后移
            temp = temp.getNextProcessTemplate();
        }
    }

    // 添加一个节点到双向链表的最后.
    public void addProcess(ProcessTemplate Node) {

        // 因为head节点不能动，因此我们需要一个辅助遍历 temp
        ProcessTemplate temp = head;
        // 遍历链表，找到最后
        while (true) {
            // 找到链表的最后
            if (temp.getNextProcessTemplate() == null) {//
                break;
            }
            // 如果没有找到最后, 将将temp后移
            temp = temp.getNextProcessTemplate();
        }
        // 当退出while循环时，temp就指向了链表的最后
        // 形成一个双向链表
        temp.setNextProcessTemplate(Node);
        Node.setPreProcessTemplate(temp);
    }




}
